<p>Early classes of the Java API, such as <code>Vector</code>, <code>Hashtable</code> and <code>StringBuffer</code>, were synchronized to make them
thread-safe. Unfortunately, synchronization has a big negative impact on performance, even when using these collections from a single thread.</p>
<p>It is better to use their new unsynchronized replacements:</p>
<ul>
  <li> <code>ArrayList</code> or <code>LinkedList</code> instead of <code>Vector</code> </li>
  <li> <code>Deque</code> instead of <code>Stack</code> </li>
  <li> <code>HashMap</code> instead of <code>Hashtable</code> </li>
  <li> <code>StringBuilder</code> instead of <code>StringBuffer</code> </li>
</ul>
<p>Even when used in synchronized context, you should think twice before using it, since it’s usage can be tricky. If you are confident the usage is
legitimate, you can safely ignore this warning.</p>
<h2>Noncompliant Code Example</h2>
<pre>
Vector cats = new Vector();
</pre>
<h2>Compliant Solution</h2>
<pre>
ArrayList cats = new ArrayList();
</pre>
<h2>Exceptions</h2>
<p>Use of those synchronized classes is ignored in the signatures of overriding methods.</p>
<pre>
@Override
public Vector getCats() {...}
</pre>

